JavaScript
part 16/19 ยท 71.4 KB total
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Une utilisation importante des expressions de fonctions immรฉdiatement invoquรฉes est pour la crรฉation de modules. Les modules permettent ร la fois de rassembler des propriรฉtรฉs et des mรฉthodes dans un espace de nom et de rendre certains membres privรฉs :
var compteur = (function () {
var i = 0; // propriรฉtรฉ privรฉe
return { // mรฉthodes publiques
obtenir: function () {
alert(i);
},
mettre: function (valeur) {
i = valeur;
},
incrementer: function () {
alert(++i);
}
};
})(); // module
compteur.obtenir(); // affiche 0
compteur.mettre(6);
compteur.incrementer(); // affiche 7
compteur.incrementer(); // affiche 8
compteur.incrementer(); // affiche 9
Prototypes
Les prototypes sont des objets utilisรฉs lors d'un รฉchec de rรฉsolution de nom. Ce mรฉcanisme est un type d'hรฉritage : l'hรฉritage par prototype. En JavaScript, tout objet possรจde un prototype, accessible via la mรฉthode Object.getPrototypeOf (ou via la propriรฉtรฉ historique __proto__ standardisรฉe dans ECMAScript 6 pour assurer la compatibilitรฉ entre les navigateurs mais non recommandรฉe). De plus, l'opรฉrateur new permet de transformer l'invocation d'une fonction constructeur en un objet (instanciation) dont le prototype est รฉgal ร la propriรฉtรฉ prototype de la fonction constructeur :
function MonConstructeur() {
this.maPropriete1 = 3;
}
const monInstance = new MonConstructeur();
alert(monInstance.maPropriete1); // affiche 3
alert(Object.getPrototypeOf(monInstance) === MonConstructeur.prototype); // affiche true
MonConstructeur.prototype.maPropriete2 = 5;
alert(monInstance.maPropriete2); // affiche 5
Toute instance de MonConstructeur (monInstance ici) possรจde un prototype รฉgal ร MonConstructeur.prototype. Lors de l'utilisation d'une propriรฉtรฉ ou d'une mรฉthode d'une instance de MonConstructeur (monInstance.maPropriete1 et monInstance.maPropriete2 ici), si l'instance ne possรจde pas la propriรฉtรฉ ou la mรฉthode recherchรฉe, la recherche se poursuit dans le prototype de l'instance (MonConstructeur.prototype ici). Si la recherche รฉchoue aussi avec cet objet, la recherche se poursuit dans le prototype de cet objet, et ainsi de suite jusqu'ร arriver ร la premiรจre fonction constructeur. Si la recherche รฉchoue encore, cette premiรจre fonction constructeur รฉtant une fonction donc une instance de la fonction constructeur Function du langage, la recherche se poursuit dans son prototype qui est รฉgal ร Function.prototype. Si la recherche รฉchoue ร nouveau, Function.prototype รฉtant un objet donc une instance de la fonction constructeur Object du langage, la recherche se poursuit dans son prototype qui est รฉgal ร Object.prototype. Si la recherche รฉchoue cette fois, comme le prototype de Object.prototype est รฉgal ร null, la recherche s'arrรชte et JavaScript gรฉnรจre une erreur de rรฉsolution de nom. Ce mรฉcanisme de recherche parcourt ce qu'on appelle la chaรฎne de prototypes.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ